/*

* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Smart-Shop开源商城系统/ Java商城-首选电商平台系统 请务必保留此注释头信息
* |     开源地址: https://gitee.com/ningbo-qishan/gruul-mall
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     可正常分享和学习源码,未经授权 不可商用！
* |     商业版中台购买/开源版商业授权 联系技术客服
* |     官网:  https://www.73app.cn/
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Copyright (c) 2016-2999 宁波启山智软科技有限公司
* |     版权所有 ,侵权必究！
* ------------------------------------------------------------------------

*/
package com.medusa.gruul.solitaire.wechat;


import com.medusa.gruul.solitaire.wechat.model.*;
import com.medusa.gruul.solitaire.wechat.response.MediaResponse;
import com.medusa.gruul.solitaire.wechat.response.WebSyncResponse;

import java.util.List;

/**
 * 微信API
 *
 * @author biezhi
 * @date 2018/1/21
 */
public interface WeChatApi {


    /**
     * 扫码登录
     *
     * @param autoLogin
     */
    void login(boolean autoLogin);

    /**
     * 退出登录
     */
    void logout();

    /**
     * 加载联系人
     *
     * @param seq
     */
    void loadContact(int seq);

    /**
     * 心跳检测
     *
     * @return SyncCheckRet
     */
    SyncCheckRet syncCheck();

    /**
     * 拉取新消息
     *
     * @return WebSyncResponse
     */
    WebSyncResponse webSync();

    /**
     * 处理消息，转换为 WeChatMessage 类型
     *
     * @param messages
     * @return List<WeChatMessage>
     */
    List<WeChatMessage> handleMsg(List<Message> messages);

    /**
     * 发送文本消息
     *
     * @param toUser
     * @param msg
     * @return boolean
     */
    boolean sendText(String toUser, String msg);

    /**
     * 发送图片
     *
     * @param toUser
     * @param filePath
     * @return boolean
     */
    boolean sendImg(String toUser, String filePath);

    /**
     * 发送文件
     *
     * @param toUser
     * @param filePath
     * @return boolean
     */
    boolean sendFile(String toUser, String filePath);

    /**
     * 上传附件
     *
     * @param toUser
     * @param filePath
     * @return MediaResponse
     */
    MediaResponse uploadMedia(String toUser, String filePath);

    /**
     * 根据UserName获取账号信息
     *
     * @param id
     * @return
     */
    Account getAccountById(String id);

    /**
     * 根据备注或昵称查找账户
     *
     * @param name
     * @return
     */
    Account getAccountByName(String name);

    /**
     * 撤回本条消息 (应为 2 分钟内发出的消息)
     *
     * @param msgId  消息id
     * @param toUser 发送消息的人
     * @return boolean
     */
    boolean revokeMsg(String msgId, String toUser);

    /**
     * 添加好友验证
     *
     * @param recommend 好友信息
     * @return boolean
     */
    boolean verify(Recommend recommend);

    /**
     * 添加好友
     *
     * @param friend 好友的UserName
     * @param msg    添加好友时的消息
     * @return boolean
     */
    boolean addFriend(String friend, String msg);

    /**
     * 创建群聊
     *
     * @param topic   群名称
     * @param members 群成员UserName列表
     * @return boolean
     */
    boolean createChatRoom(String topic, List<String> members);

    /**
     * 从群聊中移除某个群成员
     *
     * @param member
     * @param group
     * @return boolean
     */
    boolean removeMemberByGroup(String member, String group);

    /**
     * 邀请好友进群
     *
     * @param member
     * @param group
     * @return boolean
     */
    boolean inviteJoinGroup(String member, String group);

    /**
     * 修改群名
     *
     * @param oldTopic 旧群名
     * @param newTopic 新群名
     * @return boolean
     */
    boolean modifyGroupName(String oldTopic, String newTopic);

    /**
     * 获取微信群信息
     *
     * @return String
     */
    List<Account> getIndexGroupList();

    /**
     * 通过名称获取群名称
     *
     * @param nickName
     * @return String
     */
    String getGroupNameByNickName(String nickName);

    /**
     * 下载头像
     *
     * @param userName
     * @return String
     */
    String downloadHeadImg(String userName);

    /**
     * 测试
     *
     * @param url
     */
    void test(String url);
}